<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>https建立连接过程</title>
    <style>
        body {
            background-color: #c7edcc
        }
    </style>
</head>
<body>
<pre>
 (1） 客户端向服务器端索要并验证公钥。
（2） 双方协商生成"对话密钥"。
（3） 双方采用"对话密钥"进行加密通信。
    上面过程的前两步，又称为"握手阶段"（handshake）。

    首先，HTTPS并不是这种加密技术的正式名称，HTTPS代表的是“在TLS/SSL上实现的HTTP协议”，因此实现加密的其实是位于HTTP下面的TLS/SSL层, TLS/SSL下面是socket


我们看看TLS/SSL所实现的几个主要机制：

1. 证书：通过第三方权威证书颁发机构（如VeriSign）验证和担保网站的身份，防止他人伪造网站身份与不知情的用户建立加密连接。
2. 密钥交换：通过公钥（非对称）加密在网站服务器和用户之间协商生成一个共同的会话密钥。//1和2是握手流程
3. 会话加密：通过机制(2)协商的会话密钥，用对称加密算法对会话的内容进行加密。//防止窃听,看不见内容
4. 消息校验：通过消息校验算法来防止加密信息在传输过程中被篡改。//防止修改

通过上述机制，用户与网站之间的传输内容受到了保护，因此能够获得很高的安全性。不过，任何密码学手段都不是绝对安全的，上面几个机制中其实都存在可能的风险：

1. 证书：如果有人伪造证书，浏览器会发出警告，提示用户该网站的证书可能是伪造的，应该停止访问，但如果你无视浏览器的警告，你的会话信息就有可能被伪造者窃取。此外，如果第三方证书颁发机构遭到攻击，攻击者窃取了已颁发的证书密钥，就可以伪造相应的网站证书，完全骗过浏览器的安全机制，这样的例子的确曾经发生过。

2、3、4这三个机制中，所采用的加密算法的安全性决定了整个体系的安全性。我们可以通过浏览器提供的HTTPS连接信息来查看这些算法

2. 密钥交换：RSA，这是一种最普遍使用的公钥加密算法，一般来说安全性很高。
3. 会话加密：AES-256(CBC Mode），这是一种非常广泛使用的加密算法，采用256位密钥代表其安全性很高，如果采用128位密钥（AES-128）则安全性就差一些。
4. 消息校验：SHA1，这是一种散列算法，SHA1的安全性比MD5要好，但如果采用SHA256则安全性会更好一些。

除此之外还要提醒注意的是，尽管工作在TLS/SSL层之上的HTTP协议（HTTPS）中传输的消息通过上述机制进行了加密，但工作在TLS/SSL层之下的部分则是不受保护的，
    例如你所访问的网站域名和IP地址等。换句话说，如果有人窃听你和某网站之间的通信，即便他不知道你和网站之间会话的具体内容，但完全可以知道你访问的是哪个网站。
    如果要对这些信息也进行保护,则需要同时使用工作在底层的安全传输协议，例如IPSec，很多VPN的实现就是建立在IPSec基础之上的。

</pre>
</body>
</html>